﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Diagnostics;
using System.Configuration;

namespace SistemaPetShop.Negocio
{
    public class Cliente
    {
        OleDbDataReader dataReaderAccess;
        MySqlDataReader dataReaderMySql;
        StringBuilder query = new StringBuilder();
        Conexao c = new Conexao();
        EventLog log = new EventLog();

        public bool _ApagaCliente(Int32 idCliente)
        {
            bool retorno = false; 
            try 
	        {	        
            
            c.AbrirConexao();

            retorno = c.Insert("DELETE FROM Animal where Cliente_idCliente = " + idCliente.ToString());

            retorno = c.Insert("DELETE FROM Cliente where idCliente = " + idCliente.ToString());
            c.FecharConexao();
            return retorno;
    
		
	        }
	        catch (Exception ex)
	        {
                log.Source = ConfigurationSettings.AppSettings.Get("eventView").ToString();
                log.WriteEntry(ex.Message, EventLogEntryType.Error);		
		        throw;
        	}
        }

        public bool _InsereCliente(String nome, String cep, String tLogradouro, String logradouro, String numero, String bairro, String cidade, String estado, String telefone1, String telefone2, String celular, String operadora, String observacao)
        {
            try
            {
                Conexao c = new Conexao();
                c.AbrirConexao();

                string dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff");

                query.Append("call pInsereCliente ( '");
                query.Append(nome.ToUpper() + "','");
                query.Append(tLogradouro.ToUpper() + "','");
                query.Append(logradouro.ToUpper() + "','");
                query.Append(numero.ToUpper() + "','");
                query.Append(bairro.ToUpper() + "','");
                query.Append(cidade.ToUpper() + "','");
                query.Append(estado.ToUpper() + "','");
                query.Append(cep.ToUpper() + "','");
                query.Append(telefone1.ToUpper() + "','");
                query.Append(telefone2.ToUpper() + "','");
                query.Append(celular.ToUpper() + "','");
                query.Append(operadora.ToUpper() + "','");
                query.Append(dt.ToUpper() + "','");
                query.Append(observacao.ToUpper() + "');");

                // DateTime.ParseExact(data, "yyyyMMdd", null);

                bool retorno = c.Insert(query.ToString());
                c.FecharConexao();
                query.Remove(0, query.Length);
                if (retorno)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                return false;
            }

        }

        public DataTable _EditarCliente(Int32 idCliente)
        {
            DataTable dt = new DataTable();
            c.AbrirConexao();
            dataReaderMySql = c.Consulta("select * from cliente where idCliente = " + idCliente.ToString());
            dt.Load(dataReaderMySql);
            c.FecharConexao();
            return dt;
        }

        public DataTable _ListaCliente()
        {
            DataTable dt = new DataTable();
            c.AbrirConexao();
            dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,animal.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente");
            dt.Load(dataReaderMySql);
            c.FecharConexao();
            return dt;
        }

        public DataTable _ListaNomeCliente()
        {
            DataTable dt = new DataTable();
            c.AbrirConexao();
            dataReaderMySql = c.Consulta("select DISTINCT idCliente,nome from Cliente ");
            dt.Load(dataReaderMySql);
            c.FecharConexao();
            return dt;
        }



        public DataTable _CarregarEndereco(string cep)
        {
            DataTable dt = new DataTable();
            c.AbrirConexaoAccess();
            query.Append("SELECT LOG_LOGRADOURO.LOG_NU, LOG_LOGRADOURO.UFE_SG, LOG_LOGRADOURO.LOG_NO, LOG_LOGRADOURO.CEP, LOG_LOGRADOURO.TLO_TX, LOG_LOCALIDADE.LOC_NO, LOG_BAIRRO.BAI_NO FROM (LOG_LOCALIDADE LEFT JOIN (LOG_BAIRRO LEFT JOIN LOG_FAIXA_BAIRRO ON LOG_BAIRRO.BAI_NU = LOG_FAIXA_BAIRRO.BAI_NU) ON LOG_LOCALIDADE.LOC_NU = LOG_BAIRRO.LOC_NU) INNER JOIN LOG_LOGRADOURO ON LOG_LOCALIDADE.LOC_NU = LOG_LOGRADOURO.LOC_NU WHERE (((LOG_LOGRADOURO.CEP)= '");
            query.Append(cep);
            query.Append("'  And (LOG_LOGRADOURO.CEP) Between [LOG_FAIXA_BAIRRO].[FCB_CEP_INI] And [LOG_FAIXA_BAIRRO].[FCB_CEP_FIM]));");
            dataReaderAccess = c.ConsultaAccess(query.ToString());
            query.Remove(0, query.Length);
            dt.Load(dataReaderAccess);
            c.FecharConexaoAccess();
            return dt;
        }

        public DataTable _ListaClienteEspecifico(string conteudo, string tipoPesquisa)
        {
            DataTable dt = new DataTable();
            Conexao c = new Conexao();
            c.AbrirConexao();

            switch (tipoPesquisa)
            {
                case "Nome":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where cliente.nome like '%" + conteudo + "%'");
                    break;
                case "Logradouro":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where cliente.logradouro like '%" + conteudo + "%'");
                    break;
                case "Bairro":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where cliente.bairro like '%" + conteudo + "%'");
                    break;
                case "Telefone":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where cliente.telefone1 like '%" + conteudo + "%' or cliente.telefone2 like '%" + conteudo + "%' or cliente.celular like '%" + conteudo + "%'");
                    break;
                case "Apelido":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where animal.apelido like '%" + conteudo + "%'");
                    break;
                case "Especie":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where animal.especie like '%" + conteudo + "%'");
                    break;
                case "Raca":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where animal.raca like '%" + conteudo + "%'");
                    break;
                case "Porte":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where animal.porte like '%" + conteudo + "%'");
                    break;
                case "Pelagem":
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente where animal.pelagem like '%" + conteudo + "%'");
                    break;
                default:
                    dataReaderMySql = c.Consulta("select DISTINCT cliente.idCliente,cliente.nome,cliente.logradouro,cliente.numero,cliente.bairro,cliente.cidade,cliente.estado,cliente.telefone1,cliente.telefone2,cliente.celular, cliente.operadora,cliente.dataCadastro,animal.apelido,animal.Especie,animal.Raca,animal.porte,animal.pelagem from Cliente cliente LEFT JOIN Animal animal on cliente.idCliente = animal.Cliente_idCliente ");
                    break;
            }

            dt.Load(dataReaderMySql);
            c.FecharConexao();
            return dt;
        }


        public bool _AtualizaFornecedor(String nome, String tLogradouro, String logradouro, String numero, String bairro, String cidade, String uf, String cep, String fone1, String fone2, String celular, String operadora, String observacao, String idCliente)
        {
            try
            {
                Conexao c = new Conexao();
                c.AbrirConexao();

                query.Append("call pAtualizaCliente ( '");
                query.Append(nome.ToUpper() + "','");
                query.Append(tLogradouro.ToUpper() + "','");
                query.Append(logradouro.ToUpper() + "','");
                query.Append(numero.ToUpper() + "','");
                query.Append(bairro.ToUpper() + "','");
                query.Append(cidade.ToUpper() + "','");
                query.Append(uf.ToUpper() + "','");
                query.Append(cep.ToUpper() + "','");
                query.Append(fone1.ToUpper() + "','");
                query.Append(fone2.ToUpper() + "','");
                query.Append(celular.ToUpper() + "','");
                query.Append(operadora.ToUpper() + "','");
                query.Append(observacao.ToUpper() + "','");
                query.Append(idCliente.ToUpper() + "');");

                bool retorno = c.Insert(query.ToString());
                query.Remove(0, query.Length);
                c.FecharConexao();
                if (retorno)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch (Exception ex)
            {
                return false;
            }


        }
        





    }
}
